package com.teradata.olingo.metadata.core.edm.mapper.api;


import com.teradata.olingo.metadata.core.edm.mapper.exception.ODataGenericModelException;

import java.util.List;

public interface GenericAssociationPath {

  String PATH_SEPERATOR = "/";

  String getAlias();

  List<GenericOnConditionItem> getJoinColumnsList() throws ODataGenericModelException;

  List<GenericPath> getLeftColumnsList() throws ODataGenericModelException;

  List<GenericPath> getRightColumnsList() throws ODataGenericModelException;

  GenericAssociationAttribute getLeaf();

  List<GenericElement> getPath();

  GenericStructuredType getTargetType();

  GenericStructuredType getSourceType();

  boolean isCollection();

  GenericAssociationAttribute getPartner();

  GenericJoinTable getJoinTable();

  /**
   * Only available if a Join Table was used
   * @return
   * @throws ODataGenericModelException
   */
  List<GenericPath> getInverseLeftJoinColumnsList() throws ODataGenericModelException;
}